# -*- coding: UTF-8 -*-
'''
@Project ：pythonProject 
@File    ：functionDemo3.py
@Author  ：siwei
@Date    ：2023/11/2 21:52 
@other   ：str.print---->print(str)
'''


# 3.默认值参数:是在函数定义时,直接对形式参数据进行赋值,在调用时如果该参数不传值,将使用默认值,
# 如果该参数传值,则使用传递的值
def happy_birthday3(name='夏思维', age='18'):
    print('我叫' + name + ',今年' + age + '岁')


happy_birthday3()  # 函数调用时如果该参数不传值,将使用默认值
happy_birthday3('xsw')  # 位置传参,该参数传值,则使用传递的值
happy_birthday3(age='18')  # 关键字传参,name使用默认值


def fun(a, b=1):  # 当函数定义的形参中同时存在位置参数和默认参数时,应遵循位置参数在前,默认值参数在后
    pass


# 可变参数:
# 1.个数可变的位置参数:是在参数前加一颗星(*para),para是形参的名称,函数调用时可接收任意个数的的实际参数,
# 并放到一个元组中.
def fun1(*para):  # 定义的时候在参数前加*,是个数可变的位置参数
    print(type(para))
    for i in para:
        print(i)


fun1(1, 2, 3, 4, 5)
fun1(12, 34)
fun1(10)

fun1([11, 22, 33])  # 传一个列表,实际传的是一个参数
fun1(*[11, 22, 33])  # 调用的时候在参数前加*,是将列表进行解包,分为多个参数传参

print('-' * 20)


# 2.个数可变的关键字参数:是在参数前加两颗星(**para),在函数调用时可接收任意多个"参数=值"形式的参数,并放到一个字典中.
def fun2(**kwpara):
    print(type(kwpara))
    for key, value in kwpara.items():  # 遍历字典
        print(key, '----', value)


fun2(a=1, b=2, c=3)
fun2(a=1, b=2, c=3, d=4)

d = {'a': 1, 'b': 2, 'c': 3}
fun2(**d)  # 如果传的是整个字典,调用的时候在参数前加**,是将字典进行解包,分为多个关键字参数传参
fun2(**{'a': 1, 'b': 2, 'c': 3})
